/** @jsxImportSource @emotion/react */
import * as React from "react";
import {
    InputLine, Input, TextArea, InputDatalist, Text, SuffixInput, useTheme, LineColumn,
    Table, TableRow, CCell, TableBody, BlobInputList, useToast, Button, Select,
} from "customize-easy-ui-component";
import {InspectRecordLayout, InternalItemProps, useItemInputControl} from "../../common/base";
import {useMeasureInpFilter} from "../../common/hooks";
import {calcAverMaxArrObj, floatInterception, tableSetInp,} from "../../../common/tool";
import {setupItemAreaRoute} from "./orcIspConfig";
import {useCalcEvalTotalScore} from "../hook/useCalcEvalTotalScore";
import {EditStorageContext} from "../../StorageContext";
import {useThreeRaftSurvey} from "../../hook/useThreeRaft";
import {useMedia} from "use-media";
import {assertNamesUnique} from "../../common/eHelper";
import {EachMeasureCritConfig} from "../../common/msCriteria";
import {itemA复检} from "../editor";

/*替换旧版本：
    const getInpFilter = React.useCallback((par: any) => {
        const {检验日期,级别整,本体状,建议,评估结论,大备注,unq,unqA,unqB} =par||{};
        return {检验日期,级别整,本体状,建议,评估结论,大备注,unq,unqA,unqB};
    }, []);
* */
const itemA结论=['检验日期','级别整','本体状','建议','评估结论','大备注','unqA','unqB'];
//统一做法，unq 独立的
const itemA结论m=itemA结论.concat(['unq']);
//评估 下结论页面：
export const ItemConclusion=
    React.forwardRef((
        { children, show ,alone=true,refWidth,rep}:InternalItemProps,  ref
    ) => {
        const theme = useTheme();
        const [getInpFilter]=useMeasureInpFilter(null,itemA结论m,);
        const {inp, setInp} = useItemInputControl({ ref });
        //【特殊需要】 提取全部的配置
        const impressionismAs =React.useMemo(() => {
            return setupItemAreaRoute({rep, theme});
        }, [theme]);
        //特例：直接从 底层状态总库当中 获取数据。
        const {storage, } =React.useContext(EditStorageContext) as any;
        const evalTotalScore=floatInterception(useCalcEvalTotalScore({itRes:storage, ItemArs:impressionismAs?.Item}),2);

        return (
            <InspectRecordLayout inp={inp} setInp={setInp}  getInpFilter={getInpFilter} show={show}
                                 alone={alone}  label={'五、评估结论'}>
                四、 评估原始记录表， 总得分：{evalTotalScore} <br/>
                (一) 自动扶梯(自动人行道)状况：通过对该自动扶梯(自动人行道)的安全性能技术 评估，该自动扶梯(自动人行道)设备本体安全状况分值为= {evalTotalScore} <br/>
                备注：项目编号后A表示必须整改项目、B表示现行安全技术规范或标准新要求的项目,无标注的表示建议整改项目，标有※的项目为应当遵循“水桶短板理论”的评估项目。
                <hr/>
                <Text  variant="h5">
                    四、评估结论， 评估综述。
                </Text>
                评估综述：
                <LineColumn column={6} >
                    <InputLine  label='自动扶梯(自动人行道)安全级别整体水平为' >
                        <SuffixInput  value={inp?.级别整 ||''} onSave={txt=> setInp({...inp,级别整: txt || undefined })}>级</SuffixInput>
                    </InputLine>
                    <InputLine  label='自动扶梯(自动人行道)本体状态' >
                        <Input  value={inp?.本体状 ||''}
                                onChange={e => setInp({...inp,本体状:e.currentTarget.value || undefined}) }/>
                    </InputLine>
                </LineColumn>
                (二)存在的风险：<br/>
                1、存在 {inp?.unqA?.length || '<未初始化>'} 个不符合项目，这些项目不符合《电梯监督检验和定期检验规则—自动扶梯与自动人行道》（TSG T7005-2012）(含1号、2号、3号修改单)，已存在一定 安全风险，必须整改（详见表1）。以上项目未经整改合格，该电梯严禁投入使用；<br/>
                2、存在 {inp?.unq?.length || '<未初始化>'} 个不符合项目，虽然能够符合现行安全技术规范要求，但其安全技术性能降低，具有一定的潜在安全风险，对以上项目建议整改（详见表2）。在整改完成前，维保单位应当加强日常维护保养，使用单位应当采取有效的安全监护措施；<br/>
                3、存在 {inp?.unqB?.length || '<未初始化>'} 个不符合项目，该自动扶梯（自动人行道）执行旧的安全技术规范和标准，因为新旧安全技术规范或标准的要求不一致，导致这些项目不符合现行安全技术规范或标准的要求（详见表3）。<br/>
                评估结论：
                <Text  variant="h5">（三）、使用维保建议 》</Text>
                <BlobInputList  value={inp?.建议 ||''} rows={8} onListChange={v => setInp({...inp,建议:v || undefined}) }
                    datalist={["维保单位应根据电梯零部件存在风险的评估分析，按照TSG T5002-2017《电梯维护保养规则》要求，对电梯薄弱环节的零部件加强监控；除了按TSG T5002-2017《电梯维护保养规则》做好维护保养外，零部件存在风险而未达到功能失效，暂时不需要更换新零部件或对原有零部件拆卸、加工、修理的项目，应增加维护保养频次和维护保养项目。",
                        "主驱动链、梯级链和扶手带驱动链使用寿命已接近末期，维保单位应对其增加维护保养频次。",
                    ]}
                />
                <Text  variant="h4">评估结论 》</Text>
                <BlobInputList  value={inp?.评估结论 ||''} rows={5} onListChange={v => setInp({...inp,评估结论:v || undefined}) }
                                datalist={["1、经过对自动扶梯（自动人行道）所存在的风险及电梯运行能力综合分析，建议对该自动扶梯（自动人行道）进行一般修理。2、如果使用单位完成本报告书表1、2、3的全部项目整改，该自动扶梯（自动人行道）的下次评估时间为2032年，否则该自动扶梯（自动人行道）的下次评估时间为2029年。"]}
                />
                <div><Text  variant="h5">备注:</Text>
                    <BlobInputList  value={inp?.大备注 ||''}  rows={5} datalist={["根据维护保养记录：未更换过主驱动链、梯级链和扶手带驱动链。"]}
                                    onListChange={v => setInp({ ...inp, 大备注: v || undefined}) } />
                </div>
                <InputLine  label='设置评估日期' >
                    <Input  value={inp?.检验日期 ||''}  type='date'
                            onChange={e => setInp({ ...inp, 检验日期: e.currentTarget.value}) } />
                </InputLine>
            </InspectRecordLayout>
        );
    } );

//唯一性检查：也会主动纳入names[]的字段名。
const input使用情况={
    edit:(inp:any,setInp:(a:any)=>void, orc:any)=>{
        return <div>该自动扶梯（自动人行道）于
            <Input value={inp?.出厂日 ||''} size={7} style={{display: 'inline-flex', width: 'unset'}}
                   onChange={e => setInp({ ...inp, 出厂日: e.currentTarget.value||undefined }) }/>
            出厂，投入使用将近
            <Input value={inp?.限超过 ||''} size={2} style={{display: 'inline-flex', width: 'unset'}}
                   onChange={e => setInp({ ...inp, 限超过: e.currentTarget.value||undefined }) }/>
            年，期间自动扶梯(自动人行道)
            <Input value={inp?.发生过 ||''} size={2} style={{display: 'inline-flex', width: 'unset'}}
                   onChange={e => setInp({ ...inp, 发生过: e.currentTarget.value||undefined }) }/>
            发生过事故或重大故障，
            <Input value={inp?.被重大 ||''} size={2} style={{display: 'inline-flex', width: 'unset'}}
                   onChange={e => setInp({ ...inp, 被重大: e.currentTarget.value||undefined }) }/>
            被重大修理或改造过 。自动扶梯(自动人行道)所处环境
            <Input value={inp?.行环境 ||''} size={13} style={{display: 'inline-flex', width: 'unset'}}
                   onChange={e => setInp({ ...inp, 行环境: e.currentTarget.value||undefined }) }/>
            ，自动扶梯（自动人行道）运行状况
            <Input value={inp?.行状况 ||''} size={13} style={{display: 'inline-flex', width: 'unset'}}
                   onChange={e => setInp({ ...inp, 行状况: e.currentTarget.value||undefined }) }/>
            。
        </div>;
    },
    names: ['出厂日','限超过','发生过','被重大','行环境','行状况' ],
    toTail: '设备使用情况',
    view:(orc:any)=>{
        return <div css={{display: 'flex',flexDirection: 'column',alignItems: 'flex-start'}}>
            该自动扶梯（自动人行道）于 {orc?.出厂日} 出厂，投入使用将近 {orc?.限超过} 年，期间自动扶梯(自动人行道) {orc?.发生过} 发生过事故或重大故障，{orc?.被重大}&nbsp;
            被重大修理或改造过 。自动扶梯(自动人行道)所处环境 {orc?.行环境}，自动扶梯（自动人行道）运行状况 {orc?.行状况} 。
        </div>
    }
};
export const config设备概况 = [
    [['设备名称', '_$设备名称'], ['注册代码','_$注册代码'] ],
    [['使用单位', '_$使用单位'], ['维保单位','_$维保单位'] ],
    [['单位地址', '_$使用单位地址'],  ],
    [['联系人','_$设备联系人'],['联系电话','_$设备联系手机'] ],
    [['使用地点','_$设备使用地点'], ['使用单位编号', '_$单位内部编号'], ],
    [['设备号','_$eqpcod'],['制造日期','_$制造日期']],
    [['型号', '_$型号'], ['产品编号', '_$出厂编号'] ],
    [['名义速度', '_$运行速度', 'm/s'], ['名义宽度', '_$名义宽度', 'mm'] ],
    [['倾斜角', '_$倾斜角度', '°'], ['提升高度', '_$提升高度', 'm'] ],
    [['输送能力', {n:'输送能',u:'P/h'}, ], ['自动人行道使用区长度', '_$使用区长度', 'm']  ],
    [['制造单位', '_$制造单位'] ],
    [['设备使用情况', '限超过', input使用情况] ],
];
/**不要重名了 ['附设装置名称','附设装置'] 可能莫名其妙报错的。台账snapshot.‘安装单位’等不能直接使用的，要本次最新:易变动。
 * 设备概况有些字段不在台账存在的，还有些不想采用台账的数据，还有些事后才能够同步给台账的；
 * */
const dbName设备概况 =[
    {desc:'联系人',name:'安管人员'},{desc:'联系电话',name:'安管电话'},
];
const itemA设备概=['限超过','发生过','被重大','行环境','行状况'];
dbName设备概况.forEach(({name} : any, i:number)=> {
    itemA设备概.push( name );
});
/**注意这里的ref不是窗口<DIV ref={ref}>的哪一个;而是 React.useRef<InternalItemHandResult>(null)类似的传递数据和接口函数的,不是一个东西;
 * */
export const DeviceSurvey=
    React.forwardRef((
        { children, show ,alone=true,refWidth,verId,label}:InternalItemProps,  ref
    ) => {
        const {inp, setInp} = useItemInputControl({ref});
        const [renderEditline, itemA概要] = useThreeRaftSurvey({inp, setInp, config: config设备概况, verId });
        const [getInpFilter] = useMeasureInpFilter(null, itemA概要,);
        return (
            <InspectRecordLayout inp={inp} setInp={setInp}  getInpFilter={getInpFilter} show={show}
                                 alone={alone}  label={label!}>
                <Text variant="h5">{label}：</Text>
                没法事前申请变更在台账中生效的还需要修正的设备概况部分:
                {renderEditline}
               </InspectRecordLayout>
        );
    } );

export const 检验结果选=['符合要求','不符合要求'];
export const itemA速度差=['行距离','用时间','速差r','仪速度偏','仪速差r'];
export const SpeedBias=
    React.forwardRef(({ children, show ,alone=true,refWidth}:InternalItemProps,  ref
    ) => {
        const itemA = React.useMemo(() => {
            return [ ...itemA速度差, '运行速度'];
        }, [ ]);
        const [getInpFilter]=useMeasureInpFilter(null, itemA, );
        const {inp, setInp} = useItemInputControl({ ref });
        const speedVs= floatInterception(inp?.行距离 / inp?.用时间, 4) as unknown as number;
        const resPec=floatInterception(100*(speedVs-inp?.运行速度)/inp?.运行速度, 2);
        const resPec2=floatInterception(100*(inp?.仪速度偏-inp?.运行速度)/inp?.运行速度, 2);
        return (
            <InspectRecordLayout inp={inp} setInp={setInp}  getInpFilter={getInpFilter} show={show}
                                 alone={alone}  label={`附录A 空载运行速度与名义速度偏差`}>
                <Text variant="h5">附录A 空载梯级（踏板、胶带）运行速度与名义速度偏差（简易方法）{'>>'}</Text>
                <LineColumn>
                    <InputLine  label='梯级、踏板或胶带实际运行距离S(m)' >
                        <SuffixInput  value={inp?.行距离??''} onSave={txt=> setInp({...inp,行距离: txt || undefined })}>m</SuffixInput>
                    </InputLine>
                    <InputLine  label='运行距离所用的时间t(s)' >
                        <SuffixInput  value={inp?.用时间??''} onSave={txt=> setInp({...inp,用时间: txt || undefined })}>s</SuffixInput>
                    </InputLine>
                </LineColumn>
                梯级、踏板或胶带 运行速度Vs= {floatInterception(inp?.行距离/inp?.用时间, 4)} m/s; 名义速度={inp?.运行速度} m/s; 偏差计算结果：{resPec}%;
                <InputLine label={'检验结果'}>
                    <InputDatalist value={inp?.速差r?? ''} datalist={检验结果选}
                                   onListChange={v => setInp({...inp,速差r: v || undefined }) }/>
                </InputLine>
                <hr/>
                <Text variant="h5" css={{marginTop: '1rem',
                }}>空载梯级（踏板、胶带）运行速度与名义速度偏差（自动扶梯综合检测仪等其他仪器）{'>>'}</Text>
                <InputLine  label='梯级、踏板或胶带运行速度Vs' >
                    <SuffixInput  value={inp?.仪速度偏??''} onSave={txt=> setInp({...inp,仪速度偏: txt || undefined })}>s</SuffixInput>
                </InputLine>
                名义速度={inp?.运行速度} m/s; 偏差计算结果：{resPec2}%;
                <InputLine label={'检验结果'}>
                    <InputDatalist value={inp?.仪速差r?? ''} datalist={检验结果选}
                                   onListChange={v => setInp({...inp,仪速差r: v || undefined }) }/>
                </InputLine>
                <br/>
                备注：速度偏差计算结果的判定，当空载梯级（踏板、胶带）运行速度大于名义速度时为正值，反之为负值。
            </InspectRecordLayout>
        );
    } );

export const itemA扶速差=['扶行距离','左错位距','右错位距','扶速差r','仪左错距','仪右错距','仪扶差r'];
export const HandrailBias=
    React.forwardRef(({ children, show ,alone=true,refWidth,}:InternalItemProps,  ref
    ) => {
        const [getInpFilter]=useMeasureInpFilter(null, itemA扶速差, );
        const {inp, setInp} = useItemInputControl({ ref });

        const speedVs= floatInterception(inp?.行距离 / inp?.用时间, 4) as unknown as number;
        const resPec=floatInterception(100*(speedVs-inp?.运行速度)/inp?.运行速度, 2);
        const resPec2=floatInterception(100*(inp?.仪速度偏-inp?.运行速度)/inp?.运行速度, 2);
        return (
            <InspectRecordLayout inp={inp} setInp={setInp} getInpFilter={getInpFilter} show={show}
                                 alone={alone} label={`附录B 扶手带运行速度偏差`}>
                <Text variant="h5">附录B 空载梯级（踏板、胶带）和扶手带运行速度偏差（简易方法）{'>>'}</Text>
                <LineColumn>
                    <InputLine label='实际运行距离S(mm)'>
                        <SuffixInput value={inp?.扶行距离 ?? ''}
                                     onSave={txt => setInp({...inp, 扶行距离: txt || undefined})}>mm</SuffixInput>
                    </InputLine>
                    <InputLine label='左侧扶手带与梯级（踏板、胶带）错位距离Sl(mm)'>
                        <SuffixInput value={inp?.左错位距 ?? ''}
                                     onSave={txt => setInp({...inp, 左错位距: txt || undefined})}>mm</SuffixInput>
                    </InputLine>
                    <InputLine label='右侧扶手带与梯级（踏板、胶带）错位距离Sr(mm)'>
                        <SuffixInput value={inp?.右错位距 ?? ''}
                                     onSave={txt => setInp({...inp, 右错位距: txt || undefined})}>mm</SuffixInput>
                    </InputLine>
                </LineColumn>
                <div css={{textAlign: 'center'}}>
                    左侧扶手带速度偏差δl； δl=Sl/S
                    计算结果：{floatInterception(100 * inp?.左错位距 / inp?.扶行距离, 2)} %;<br/>
                    右侧扶手带速度偏差δr； δr=Sr/S
                    计算结果：{floatInterception(100 * inp?.右错位距 / inp?.扶行距离, 2)} %;
                    <Text variant="h6">判断标准 允许偏差为0-+2%</Text>
                </div>
                <InputLine label={'检验结果'}>
                    <InputDatalist value={inp?.扶速差r ?? ''} datalist={检验结果选}
                                   onListChange={v => setInp({...inp, 扶速差r: v || undefined})}/>
                </InputLine>
                <hr/>
                <Text variant="h5" css={{
                    marginTop: '1rem',
                }}>空载梯级（踏板、胶带）和扶手带运行速度偏差（自动扶梯综合检测仪等其他仪器）{'>>'}</Text>
                <LineColumn>
                    <InputLine label='左侧扶手带速度偏差δl；δl=Sl/S'>
                        <SuffixInput value={inp?.仪左错距 ?? ''}
                                     onSave={txt => setInp({...inp, 仪左错距: txt || undefined})}>%</SuffixInput>
                    </InputLine>
                    <InputLine label='右侧扶手带速度偏差δr；δr=Sr/S'>
                        <SuffixInput value={inp?.仪右错距 ?? ''}
                                     onSave={txt => setInp({...inp, 仪右错距: txt || undefined})}>%</SuffixInput>
                    </InputLine>
                </LineColumn>
                <Text variant="h6" css={{textAlign: 'center'}}>判断标准 允许偏差为0-+2%</Text>
                <InputLine label={'检验结果'}>
                    <InputDatalist value={inp?.仪扶差r ?? ''} datalist={检验结果选}
                                   onListChange={v => setInp({...inp, 仪扶差r: v || undefined})}/>
                </InputLine>
                <br/>
            </InspectRecordLayout>
        );
    });

export const itemA振动评价=['振动表','大rms','均rms'];
export const VibrationEval=
    React.forwardRef((
        { children, show ,alone=true,redId,nestMd,label,}:InternalItemProps,  ref
    ) => {
        const [getInpFilter]=useMeasureInpFilter(null,itemA振动评价,);
        const {inp, setInp} = useItemInputControl({ ref });
        const [aveVibr,maxVibr]=calcAverMaxArrObj(inp?.振动表,(row)=>row?.vs,2,6);
        return <InspectRecordLayout inp={inp} setInp={setInp} getInpFilter={getInpFilter} show={show} redId={redId}
                                    nestMd={nestMd} alone={alone} label={label!}>
            <Text variant="h5">运载装置振动测量:</Text>
            {(new Array(6)).fill(null).map((_, w: number) => {
                return <React.Fragment key={w}>
                    序号 {w + 1} ：
                    <div css={{display: 'flex', flexWrap: 'wrap', justifyContent: 'space-evenly'}}>
                        <div css={{display: 'inline-flex', alignItems: 'center', whiteSpace: 'nowrap'}}>
                            测量速度
                            <Input value={inp?.振动表?.[w]?.s || ''} size={2}
                                   style={{display: 'inline-flex', width: 'unset'}}
                                   onChange={e => tableSetInp('振动表', w, inp, setInp, 's', e.currentTarget.value || undefined)}/>
                            m/s
                        </div>
                        <div css={{display: 'inline-flex', alignItems: 'center', whiteSpace: 'nowrap'}}>
                            运行方向
                            <Select css={{width: '5rem'}}
                                    value={inp?.振动表?.[w]?.f || ''}
                                    onChange={e => tableSetInp('振动表', w, inp, setInp, 'f', e.currentTarget.value || undefined)}>
                                <option></option>
                                <option>上行</option>
                                <option>下行</option>
                            </Select>
                        </div>
                        <div css={{display: 'inline-flex', alignItems: 'center', whiteSpace: 'nowrap'}}>
                            r.m.s 值 x轴
                            <Input value={inp?.振动表?.[w]?.x || ''} size={3}
                                   style={{display: 'inline-flex', width: 'unset'}}
                                   onChange={e => tableSetInp('振动表', w, inp, setInp, 'x', e.currentTarget.value || undefined)}/>m/s²
                        </div>
                        <div css={{display: 'inline-flex', alignItems: 'center', whiteSpace: 'nowrap'}}>
                            y轴
                            <Input value={inp?.振动表?.[w]?.y || ''} size={3}
                                   style={{display: 'inline-flex', width: 'unset'}}
                                   onChange={e => tableSetInp('振动表', w, inp, setInp, 'y', e.currentTarget.value || undefined)}/>m/s²
                        </div>
                        <div css={{display: 'inline-flex', alignItems: 'center', whiteSpace: 'nowrap'}}>
                            z轴
                            <Input value={inp?.振动表?.[w]?.z || ''} size={3}
                                   style={{display: 'inline-flex', width: 'unset'}}
                                   onChange={e => tableSetInp('振动表', w, inp, setInp, 'z', e.currentTarget.value || undefined)}/>m/s²
                        </div>
                        <div css={{display: 'inline-flex', alignItems: 'center', whiteSpace: 'nowrap'}}>
                            矢量和
                            <Input value={inp?.振动表?.[w]?.vs || ''} size={3}
                                   style={{display: 'inline-flex', width: 'unset'}}
                                   onChange={e => tableSetInp('振动表', w, inp, setInp, 'vs', e.currentTarget.value || undefined)}/>m/s²
                        </div>
                        <div css={{display: 'inline-flex', alignItems: 'center', whiteSpace: 'nowrap'}}>
                            评价等级
                            <Select css={{width: '6rem'}}
                                    value={inp?.振动表?.[w]?.L || ''}
                                    onChange={e => tableSetInp('振动表', w, inp, setInp, 'L', e.currentTarget.value || undefined)}>
                                <option></option><option>好</option><option>中</option>
                                <option>较差</option><option>特别差</option>
                            </Select>
                        </div>
                    </div>
                </React.Fragment>;
            })}
            <LineColumn>
                <InputLine  label='最大r.m.s 值：' >
                    <SuffixInput  value={inp?.大rms?? maxVibr??''} onSave={txt=> setInp({...inp,大rms: txt || undefined })}>m/s²</SuffixInput>
                </InputLine>
                <InputLine  label='平均r.m.s 值：' >
                    <SuffixInput  value={inp?.均rms?? aveVibr??''} onSave={txt=> setInp({...inp,均rms: txt || undefined })}>m/s²</SuffixInput>
                </InputLine>
            </LineColumn>
        </InspectRecordLayout>;
    });

export const itemA扶振评价=['扶振表','扶大rm','扶均rm'];
export const　HandrailVibEval=
    React.forwardRef((
        { children, show ,alone=true,redId,nestMd,label,}:InternalItemProps,  ref
    ) => {
        const [getInpFilter]=useMeasureInpFilter(null,itemA扶振评价,);
        const {inp, setInp} = useItemInputControl({ ref });
        //需两组一起统计的？  const [aveVibr,maxVibr]=calcAverMaxArrObj(inp?.扶振表,(row)=>row?.vs,2,6);
        return <InspectRecordLayout inp={inp} setInp={setInp} getInpFilter={getInpFilter} show={show} redId={redId}
                                    nestMd={nestMd} alone={alone} label={label!}>
            <Text variant="h5">扶手带振动测量:</Text>
            {(new Array(4)).fill(null).map((_, w: number) => {
                return <React.Fragment key={w}>
                    序号 {w + 1} ：
                    <div css={{display: 'flex', flexWrap: 'wrap', justifyContent: 'space-evenly'}}>
                        <div css={{display: 'inline-flex', alignItems: 'center', whiteSpace: 'nowrap'}}>
                            测量速度
                            <Input value={inp?.扶振表?.[w]?.s || ''} size={2}
                                   style={{display: 'inline-flex', width: 'unset'}}
                                   onChange={e => tableSetInp('扶振表', w, inp, setInp, 's', e.currentTarget.value || undefined)}/>
                            m/s
                        </div>
                        <div css={{display: 'inline-flex', alignItems: 'center', whiteSpace: 'nowrap'}}>
                            运行方向
                            <Select css={{width: '5rem'}}
                                    value={inp?.扶振表?.[w]?.f || ''}
                                    onChange={e => tableSetInp('扶振表', w, inp, setInp, 'f', e.currentTarget.value || undefined)}>
                                <option></option>
                                <option>上行</option>
                                <option>下行</option>
                            </Select>
                        </div>
                        <div css={{display: 'inline-flex', alignItems: 'center', whiteSpace: 'nowrap'}}>
                            位置： 左侧
                            <Input value={inp?.扶振表?.[w]?.l || ''} size={3}
                                   style={{display: 'inline-flex', width: 'unset'}}
                                   onChange={e => tableSetInp('扶振表', w, inp, setInp, 'l', e.currentTarget.value || undefined)}/>
                        </div>
                        <div css={{display: 'inline-flex', alignItems: 'center', whiteSpace: 'nowrap'}}>
                            右侧
                            <Input value={inp?.扶振表?.[w]?.r || ''} size={3}
                                   style={{display: 'inline-flex', width: 'unset'}}
                                   onChange={e => tableSetInp('扶振表', w, inp, setInp, 'r', e.currentTarget.value || undefined)}/>
                        </div>
                        <div css={{display: 'inline-flex', alignItems: 'center', whiteSpace: 'nowrap'}}>
                            r.m.s 值 ：（1）=
                            <Input value={inp?.扶振表?.[w]?.o || ''} size={3}
                                   style={{display: 'inline-flex', width: 'unset'}}
                                   onChange={e => tableSetInp('扶振表', w, inp, setInp, 'o', e.currentTarget.value || undefined)}/>m/s²
                        </div>
                        <div css={{display: 'inline-flex', alignItems: 'center', whiteSpace: 'nowrap'}}>
                            （2）=
                            <Input value={inp?.扶振表?.[w]?.t || ''} size={3}
                                   style={{display: 'inline-flex', width: 'unset'}}
                                   onChange={e => tableSetInp('扶振表', w, inp, setInp, 't', e.currentTarget.value || undefined)}/>m/s²
                        </div>
                        <div css={{display: 'inline-flex', alignItems: 'center', whiteSpace: 'nowrap'}}>
                            评价等级
                            <Select css={{width: '6rem'}}
                                    value={inp?.扶振表?.[w]?.L || ''}
                                    onChange={e => tableSetInp('扶振表', w, inp, setInp, 'L', e.currentTarget.value || undefined)}>
                                <option></option><option>好</option><option>中</option>
                                <option>较差</option><option>特别差</option>
                            </Select>
                        </div>
                    </div>
                </React.Fragment>;
            })}
            <LineColumn>
                <InputLine  label='最大r.m.s 值：' >
                    <SuffixInput  value={inp?.扶大rm?? ''} onSave={txt=> setInp({...inp,扶大rm: txt || undefined })}>m/s²</SuffixInput>
                </InputLine>
                <InputLine  label='平均r.m.s 值：' >
                    <SuffixInput  value={inp?.扶均rm?? ''} onSave={txt=> setInp({...inp,扶均rm: txt || undefined })}>m/s²</SuffixInput>
                </InputLine>
            </LineColumn>
        </InspectRecordLayout>;
    });

/**测量表：太多了可拆成两个编辑器； 注意：t: [] 不同于 t: [undefined,undefined,undefined]；
 * 结果{check: '7.2'}只能放在外部：所以一个序号不能分拆两个的结论独立编辑的栏目；【所以】序号3有两个检验结果这里不支持的！
 * 加字段 sync: 配置的和检验项目列表是有联动。
 * */
export const config观测数据 = [
    [{n: '箱油温', t: ['2.4',
            <Text>传动部件啮合状态良好，减速箱油温不得超过 85℃</Text>
        ], x: '温度', u: '℃', c: '四', d: '0',
     },],
    [{check: '2.4'}],
    [{n: '水平间', t: ['11.1',
            <Text>由围裙板变形导致围裙板与梯级(或踏板、胶带)单侧间隙不应大于4mm，或两侧对称处间隙总和不应大于7mm;</Text>
        ], x: '单侧水平间隙', u: 'mm', c: '四', d: '0',
     },],
    [{check: '11.1单侧'}],
    [{n: '侧间综', t: [undefined, undefined
        ], x: '两侧间隙综合', u: 'mm', c: '四', d: '0',
    },],
    [{check: '11.1两侧'}],
    [{n: '直间隙', t: [undefined,
            <Text>如果自动人行道的围裙板位于踏板或胶带上方，由于围裙板变形导致踏板面与围裙板下端间的间隙不应大于 4mm，或踏板、胶带的水平摆动导致其与围裙板垂直投影间产生间隙；</Text>
        ], x: '垂直间隙', u: 'mm', c: '四', d: '0',
    },],
    [{check: '11.1垂直'}],
    [{n: '壁板间', t: ['13.1',
            <Text>护壁板之间的间隙应当不应大于4mm</Text>
        ], x: '间隙', u: 'mm', c: '四', d: '0',
    },],
    [{check: '13.1'}],
    [{n: '标志径', t: ['19.1',
            <Text>(1)紧急停止装置位于扶手装置高度的1/2以下，应当在扶手装置1/2高度以上的醒目位置张贴直径至少为80mm的红底白字“急停”指示标记，箭头指向紧急停止装置</Text>
        ], x: '指示标志直径', u: 'mm', c: '四', d: '0',
    },],
    [{check: '19.1(1)'}],
    [{n: '急停距扶', t: [undefined,
            <Text>(2)为方便接近，必要时应当增设附加急停装置。急停装置之间的距离应当符合下述要求： ①自动扶梯，不超过30m； ②自动人行道，不超过40m</Text>
        ], x: '自动扶梯急停装置距离', u: 'm', c: '四', d: '0',
     },],
    [{check: '19.1(2)扶梯'}],
    [{n: '急停距人', t: [undefined, undefined
        ], x: '自动人行道急停装置距离', u: 'm', c: '四', d: '0',
    },],
    [{check: '19.1(2)人行道'}],
    [{n: '啮合深', t: ['22.1',
            <Text>梳齿板的梳齿与踏面齿槽的啮合深度不应小于4mm，间隙不应大于4mm</Text>
        ], x: '啮合深度', u: 'mm', c: '四', d: '0',
     },],
    [{check: '22.1啮合'}],
    [{n: '梳间隙', t: [undefined, undefined
        ], x: '间隙', u: 'mm', c: '四', d: '0',
     },],
    [{check: '22.1间隙'}],
    [{n: '启动运时', t: ['42.6',
            <Text>采用自动启动的自动扶梯或自动人行道，当乘客从预定运行方向相反的方向进入时，自动扶梯或自动人行道仍应按预先确定的方向启动，运行时间应不少于10s。</Text>
        ], x: '自动启动运行时间', u: 's', c: '四', d: '0',
    },],
    [{check: '42.6启动'}],
    [{n: '停止运时', t: [undefined,
            <Text>当乘客通过后，自动扶梯或自动人行道应有足够的时间（至少为预期乘客输送时间再加上10s）才能自动停止运行</Text>
        ], x: '自动停止运行时间', u: 's', c: '四', d: '0',
    },],
    [{check: '42.6停止'}],
    [{n: '停距扶梯', t: ['42.9',
            <Text>自动扶梯或自动人行道的制停距离： (1)空载和有载向下运行的自动扶梯：<Table tight  miniw={800}><TableBody>
                <TableRow><CCell>额定速度</CCell><CCell>制停距离范围</CCell><CCell>额定速度</CCell><CCell>制停距离范围</CCell></TableRow>
                <TableRow><CCell>0.50m/s</CCell><CCell>0.20~1.00m</CCell><CCell>0.75m/s</CCell><CCell>0.40~1.50m</CCell></TableRow>
                <TableRow><CCell>0.65m/s</CCell><CCell>0.30~1.30m</CCell><CCell></CCell><CCell></CCell></TableRow>
            </TableBody></Table></Text>
        ], x: '制停距离', u: 'm', c: '四', d: '0',
    },],
    [{check: '42.9扶梯'}],
    [{n: '停距人行', t: [undefined,
            <Text>(2)空载和有载水平运行或有载向下运行的自动人行道：<Table tight  miniw={800}><TableBody>
                    <TableRow><CCell>额定速度</CCell><CCell>制停距离范围</CCell><CCell>额定速度</CCell><CCell>制停距离范围</CCell></TableRow>
                    <TableRow><CCell>0.50m/s</CCell><CCell>0.20~1.00m</CCell><CCell>0.75m/s</CCell><CCell>0.40~1.50m</CCell></TableRow>
                    <TableRow><CCell>0.65m/s</CCell><CCell>0.30~1.30m</CCell><CCell>0.90m/s</CCell><CCell>0.55~1.70m</CCell></TableRow>
                </TableBody></Table></Text>
        ], x: '制停距离', u: 'm', c: '四', d: '0',
    },],
    [{check: '42.9人行道'}],
    [{n: '站面积', t: ['43.3',
            <Text>（1）在机房，尤其是在桁架内部的驱动站和转向站内，应具有一个没有任何永久固定设备的、站立面积足够大的空间，站立面积不小于0.3m2，其较短一边的长度不小于0.5m；</Text>
        ], x: '站立面积', u: '㎡', c: '四', d: '1',
    },],
    [{check: '43.3(1)站立面'}],
    [{n: '短边长', t: [undefined,undefined,
        ], x: '较短边长度', u: 'm', c: '四', d: '1',slim:'',
    },],
    [{check: '43.3(1)较短边'}],
    [{n: '足面积', t: [undefined,
            <Text>(2)当驱动装置或制动器装在梯级、踏板或胶带的载客分支和返回分支之间时，在工作区段应提供一个水平的立足区域，其面积不小于0.12m2，最小边尺寸不小于0.3m</Text>
        ], x: '立足面积', u: '㎡', c: '四', d: '1',
    },],
    [{check: '43.3(2)立足面'}],
    [{n: '小边尺', t: [undefined,undefined,
        ], x: '最小边尺寸', u: 'm', c: '四', d: '1',slim:'',
    },],
    [{check: '43.3(2)最小边'}],
] as EachMeasureCritConfig[][];
    //这个位置拆分成2个编辑器的：
export const config观测数据2 = [
    [{n: '光照度', t: ['43.4',
            <Text>自动扶梯或自动人行道周边，特别是在梳齿板的附近应有足够的照明。在地面测出的梳齿相交线处的光照度至少为50lx</Text>
        ], x: '光照度', u: 'lx', c: '四', d: '0',
    },],
    [{check: '43.4'}],
    [{n: '畅通宽', t: ['43.6',
            <Text>(1)在自动扶梯和自动人行道的出入口，应有充分畅通的区域。该畅通区的宽度至少等于扶手带外缘距离加上每边各80mm，该畅通区纵深尺寸从扶手装置端部算起至少为2.5m；如果该区域的宽度不少于扶手带外缘之间的距离的两倍加上每边各加上80mm，则其纵深尺寸允许减少至2m；</Text>
        ], x: '畅通区宽度', u: 'mm', c: '四', d: '0',
    },],
    [{check: '43.6(1)宽度'}],
    [{n: '畅通深', t: [undefined,undefined,
        ], x: '畅通区纵深尺寸', u: 'm', c: '四', d: '0',slim:'',
    },],
    [{check: '43.6(1)纵深'}],
    [{n: '高出扶', t: [undefined,
            <Text>(2)如果人员在出入口可能接触到扶手带的外缘并且引起危险，则应采取适当的预防措施。例如：①设置固定的阻挡装置以阻止乘客进入该空间；②在危险区域内，由建筑结构形成的固定护栏至少增加到高出扶手带100mm，并且位于扶手带外缘80mm至120mm之间</Text>
        ], x: '固定护栏高出扶手带的距离', u: 'mm', c: '四', d: '0',
    },],
    [{check: '43.6(2)高出扶手'}],
    [{n: '带外缘', t: [undefined,undefined,
        ], x: '固定护栏与扶手带外缘距离', u: 'mm', c: '四', d: '0',slim:'',
    },],
    [{check: '43.6(2)扶手带外缘'}],
    [{n: '直净高', t: ['43.7',
            <Text>自动扶梯的梯级或自动人行道的踏板或胶带上方，垂直净高度不应小于2.30m。该净高度应当延续到扶手转向端端部</Text>
        ], x: '垂直净高度', u: 'mm', c: '四', d: '2',
    },],
    [{check: '43.7'}],
    [{n: '护板高', t: ['43.8',
            <Text>如果建筑物的障碍物会引起人员伤害时，则应采取相应的预防措施。特别是在与楼板交叉处以及各交叉设置的自动扶梯或自动人行道之间，应当设置一个高度不应小于0.30m，无锐利边缘的垂直固定封闭防护挡板，位于扶手带上方，且延伸至扶手带外缘下至少25mm（扶手带外缘与任何障碍物之间距离大于等于400mm的除外）</Text>
        ], x: '防护挡板高度', u: 'm', c: '四', d: '0',
    },],
    [{check: '43.8防护挡板'}],
    [{n: '外缘下', t: [undefined,undefined,
        ], x: '外缘下的距离', u: 'mm', c: '四', d: '0',slim:'',
    },],
    [{check: '43.8外缘下'}],
    [{n: '水平距', t: ['43.9',
            <Text>墙壁或其他障碍物与扶手带外缘之间的水平距离在任何情况下均不得小于80mm，与扶手带下缘的垂直距离均不得小于25mm</Text>
        ], x: '水平距离', u: 'mm', c: '四', d: '0',
    },],
    [{check: '43.9水平'}],
    [{n: '垂直距', t: [undefined,undefined,
        ], x: '垂直距离', u: 'mm', c: '四', d: '0',
    },],
    [{check: '43.9垂直'}],
    [{n: '手带间', t: ['43.10',
            <Text>相互邻近平行或交错设置的自动扶梯或自动人行道，扶手带之间的距离应不小于160mm</Text>
        ], x: '扶手带间距', u: 'mm', c: '四', d: '0',
    },],
    [{check: '43.10'}],
    [{n: '离地距', t: ['43.11',
            <Text>(1)为防止人员跌落而在自动扶梯或者自动人行道的外盖板上装设的防爬装置应当位于地平面上方(1000±50)mm，下部与外盖板相交，平行于外盖板方向上的延伸长度不得小于
                1000mm，并且确保在此长度范围内无踩脚处。该装置的高度至少与扶手带表面齐平；</Text>
        ], x: '防爬装置离地距离', u: 'mm', c: '四', d: '0',
    },],
    [{check: '43.11(1)离地距'}],
    [{n: '延伸长', t: [undefined,undefined,
        ], x: '防爬延伸长度', u: 'mm', c: '四', d: '0',slim:'',
    },],
    [{check: '43.11(1)延伸长'}],
    [{n: '外盖板', t: [undefined,
            <Text>(2)当自动扶梯或者自动人行道与墙相邻，并且外盖板的宽度大于125mm时，在上、下端部应当安装阻挡装置以防止人员进入外盖板区域。当自动扶梯或者自动人行道为
                相邻平行布置，并且共用外盖板的宽度大于125mm时，也应当安装这种阻挡装置。该装置应当延伸到高度距离扶手带下缘25mm～150mm处；</Text>,
        ], x: '外盖板宽度', u: 'mm', c: '四', d: '0',
    },],
    [{check: '43.11(2)外盖板'}],
    [{n: '阻挡装距', t: [undefined,undefined,
        ], x: '阻挡装置与扶手带下缘的距离', u: 'mm', c: '四', d: '0',slim:'',
    },],
    [{check: '43.11(2)阻挡装置'}],
    [{n: '墙与扶手', t: [undefined,
       <Text>(3)当自动扶梯或者倾斜式自动人行道和相邻的墙之间装有接近扶手带高度的扶手盖板，并且建筑物(墙)和扶手带中心线之间的距离大于300mm时，或者相邻自动扶梯或者倾斜式自动人行道的扶手带中心线之间的距离大于
        400mm时，应当在扶手盖板上装设防滑行装置。该装置应当包含固定在扶手盖板上的部件，与扶手带的距离不小于100mm，并且防滑行装置之间的间隔距离不大于1800mm，高度不小于20mm。该装置应当无锐角或者锐边。</Text>,
        ], x: '建筑物（墙）与扶手带中心线或相邻扶手带中心线之间的距离', u: 'mm', c: '四', d: '0',
    },],
    [{check: '43.11(3)建筑物（墙）'}],
    [{n: '防滑与扶', t: [undefined,undefined,
        ], x: '防滑行装置与扶手带距离', u: 'mm', c: '四', d: '0',slim:'',
    },],
    [{check: '43.11(3)与扶手带距'}],
    [{n: '防滑间', t: [undefined,undefined,
        ], x: '防滑行装置之前的间隔距离', u: 'mm', c: '四', d: '0',slim:'',
    },],
    [{check: '43.11(3)间隔距离'}],
    [{n: '防滑高', t: [undefined,undefined,
        ], x: '防滑行装置的高度', u: 'mm', c: '四', d: '0',slim:'',
    },],
    [{check: '43.11(3)高度'}],
] as EachMeasureCritConfig[][];


/**按照编辑器 recordPrintList 列表的编排顺序来配设的：
 * */
export const EntranceSetup =
    React.forwardRef((
        {children, show, alone = true, repId, verId, rep}: InternalItemProps, ref
    ) => {
        const theme = useTheme();
        const atPrint = useMedia('print');
        const toast = useToast();
        const doCheckNames = React.useCallback((verId: string) => {
            const impressionismAs = setupItemAreaRoute({rep, noDefault: true, theme});
            const result = assertNamesUnique([{value: rep?.tzFields}, {value: impressionismAs?.Item, type: 'impr'},
                {value: config设备概况, type:'esnt'}, {value:[...itemA结论, ...itemA复检] },
                {value: config观测数据, type:'mesB'}, {value: config观测数据2, type:'mesB'},
                {value:[...itemA速度差, ...itemA扶速差, ...itemA振动评价, ...itemA扶振评价] },
                {value:['unq', '仪器表','检验条件',  ]} ]);
            toast({title: "完成！", subtitle: result ? "没发现冲突" : "测试开关没开", intent: "success"});
        }, [rep,toast,theme]);
        const {storage, setStorage} =React.useContext(EditStorageContext) as any;
        const getInpFilter = React.useCallback((par: any) => {
            const {_tblFixed, } =par||{};
            return {_tblFixed, };
        }, []);
        const {inp, setInp} = useItemInputControl({ref});
        if (atPrint) return null;
        else return (
            <InspectRecordLayout inp={inp} setInp={setInp} getInpFilter={getInpFilter} show={show}
                                 alone={alone} label={'初始化本报告，默认值配置等'}>
                {process.env.REACT_APP_TEST==='true' && <><div>
                    <Text variant="h5">构建开发模板时的工具：校验模板的存储name冲突；</Text>
                    <Button intent='primary' onPress={() => doCheckNames(verId!)}>校验模板name唯一性</Button>
                    <Text variant="h5">设置待测试表格的各列宽度：</Text>
                    <TextArea value={storage?._tblFixed || ''} rows={2} onChange={e =>{
                        JSON.parse(e.currentTarget.value??'[]');
                        setStorage({ ...storage, _tblFixed: e.currentTarget.value || undefined}); }}/>
                </div>
                </>
                }
                <hr/>
            </InspectRecordLayout>
        );
    });
